Property in Python is a built-in decorator. Decorators in Python are functions that take other functions as arguments, perform some actions, and then return arguments. In this Python tutorial, we will discuss @property. Also, we will explain the use of setter and deleter methods.
What is Property in Python?
@property is an inbuilt decorator in Python that is used with class methods, and it is mainly used to increase the degree of data encapsulation . With the help of the @property decorator, we can access a class method as a class attribute.
Code Example
class Student():
def __init__(self,name,mom,dad):
self.name = name
self.mom_name =mom
self.dad_name =dad
def father_name(self):
return self.dad_name
@property
def mother_name(self):
return self.mom_name
sam = Student('Sam','Linda','Harry')
print(sam.name)
print(sam.father_name())
print(sam.mother_name) # here mother_name is used as an attribute, but it is a method
Output:
Sam
Harry
Linda
Behind the code
In the above code, we have made an instance sam of the Student() class and passed three arguments. Inside the Student() class , we have defined two methods, namely father_name() and mother_name() . Here, the mother_name() method has @property as a decorator, and that’s why we can print mother_name as a class attribute.
@Property setter and delete
In the above example, we print the mother_name method as an attribute. With the @property decorator, we can only print the method as an attribute, but if we use an assignment operator with the mother_name attribute, it won’t work. Rather, it throws an error. However, with the help of property setter, we can use an assignment operator with that attribute. We can also use the property deleter to delete the value that we have assigned.
Code Example
class Student():
def __init__(self,name,mom,dad):
self.name = name
self.mom_name =mom
self.dad_name =dad
def father_name(self):
return self.dad_name
def father_setter(self,dad):
self.dad_name = dad
@property
def mother_name(self):
return self.mom_name
@mother_name.setter
def mother_name(self,mom):
self.mom_name= mom
@mother_name.deleter
def mother_name(self):
print("Deleting Mother name")
self.mom_name = None
sam = Student('Sam','Linda','Harry')
print(sam.name)
print(sam.father_name())
print(sam.mother_name) # here mother_name is a used as an attribute but it is a method
print("-------------Using assignment operator to set the mother_name and simple function to change the father_name-------------------")
sam.father_setter("Harry Smith")
sam.mom_name = "Linda Smith"
print(sam.father_name())
print(sam.mother_name)
print("-----------------------property deleter for mother_name------------------------------------------")
del sam.mother_name
print(sam.mother_name)
Output:
Sam
Harry
Linda
-------------Using assignment operator to set the mother_name and simple function to change the father_name-------------------
Harry Smith
Linda Smith
-----------------------property deleter for mother_name------------------------------------------
Deleting Mother name
None
Behind the code
In the above code, we have used the @property decorator and its setter and deleter methods on the mother_name() method. With the help of the @property decorator, we were only able to print the mother_name() method as a class attribute. With the help of mother_name.setter , we were able to use the assignment operator (=) with the mother_name() method. Also, with the help of mother_name.deleter , we were able to perform the deletion operation on the mother_name() method.
Note : We redefine the function when we use the @property setter and deleter methods on the class method. In the above example, we have used the father_setter() method to mimic the working of mother.setter . With the help of @property and its setter and delete methods, we can use the class method as a class attribute.
Conclusion
That sums up our discussion on property in Python. It is a useful Python decorator that allows us to access a class method as a class attribute. Moreover, @property has several methods like deleter and setter.